#include <iostream>
#include <memory>
#include <cassert>
#include <fstream>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include "HttpServer.hpp"
#include "Usage.hpp"
#include "Util.hpp"

// 一般http都要有自己的web根目录
#define ROOT "./wwwroot" // ./wwwroot/index.html
// 如果客户端只请求了一个/,我们返回默认首页
#define HOMEPAGE "index.html"

void HandlerHttpRequest(int sockfd)
{
    char buffer[10240];
    ssize_t s= recv(sockfd,buffer,sizeof(buffer)-1,0);
    if(s>0)
        buffer[s]=0;
    std::vector<std::string> vline,vblock;
    Util::cutString(buffer,"\n",&vline);
    Util::cutString(vline[0]," ",&vblock);
    std::string file=vblock[1];
    std::string target=ROOT;
    if(file=="/") file="/index.html";
    target+=file;
    std::string content;
    std::ifstream in(target);
    if(in.is_open())
    {
        std::string line;
        while(std::getline(in,line))
        {
            content+=line;
        }
        in.close();
    }

    std::string HttpResponse;
    if(content.empty())
    {
        HttpResponse="HTTP/1.1 404 NotFound\r\n";
    }
    else
    {
        HttpResponse="HTTP/1.1 200 OK\r\n";
        
    }
    send(sockfd,HttpResponse.c_str(),HttpResponse.size(),0);
}
int main(int argc,char* argv[])
{
    if(argc!=2){
        Usage(argv[0]);
        exit(0);
    }
    std::unique_ptr<HttpServer> httpserver(new HttpServer(atoi(argv[1]),HandlerHttpRequest));
    httpserver->Start();
    return 0;
}